import store from '@/store'
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
//首页
import Home from '../views/Home/Home.vue'
//登录注册
import Login from '../views/LoginRegister/Login.vue'
import Register from '../views/LoginRegister/Register.vue'

//用户管理
import User from '../views/User/User.vue'
//管理员个人信息
import Person from '../views/User/Person.vue'

// 商品管理
import Product from '../views/Product/Product.vue'
// 商品留言
import ProductMessage from '../views/Product/ProductMessage.vue'

// 订单管理
import Order from '../views/Order/Order.vue'
// 抢单管理 
import OrderGrabbing from '../views/Order/OrderGrabbing.vue'

// 骑手管理
import Rider from '../views/Rider/Rider.vue'
// 骑手评价
import RiderEvaluate from '../views/Rider/RiderEvaluate.vue'

// 公告管理
import Notice from '../views/Notice/Notice.vue'

// 通过路由守卫验证token
import { userCheckToken } from '../api/user/index'
import { Message } from 'element-ui'


const routes = [
  {
    path: '/',
    component: () => import('../views/Manage.vue'),
    redirect: '/home',
    children: [
      //首页
      { path: 'home', name: '首页', component: Home },
      //用户管理
      { path: 'user', name: '管理员', component: User },
      //个人信息
      { path: 'person', name: '个人信息', component: Person },
      // 商品管理
      { path: 'product', name: '商品管理', component: Product},
      { path: 'product-message', name: '商品留言', component: ProductMessage},
      // 订单管理
      { path: 'order', name: '订单管理', component: Order},
      { path: 'orderg-grabbing', name: '抢单管理', component: OrderGrabbing},
      // 骑手管理
      { path: 'rider', name: '骑手管理', component: Rider},
      { path: 'rider-evaluate', name: '骑手评价', component: RiderEvaluate},
      // 公告管理
      { path: 'notice', name: '公告管理', component: Notice}
    ]
  },
  //登录注册
  { path: '/login', name: 'login', component: Login },
  { path: '/register', name: 'Register', component: Register }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

// 使用路由守卫，判断tonken是否过期
router.beforeEach((to, from, next) => {
  // 路由处在登录时，消除浏览器的jwt令牌
  if(to.path === '/login' || to.path === '/register'){
    localStorage.removeItem('LINGPAI')
    next();
  } 
  else {
    // 判断浏览器本地是否有jwt令牌，如果没有，就进行拦截
    let jwt = localStorage.getItem('LINGPAI');
    if(jwt === '' || jwt == null) {
      Message({
        message: '令牌失效，请重新登录',
        type: 'warning'
      })
      router.replace({path: '/login'})
    }
    else {
      // 将token加入请求头
      let headers = {
        token: jwt
      }
      // 后端判断该令牌是否失效，如果失效了，就跳回登录页面，
      userCheckToken(headers).then((res) => {
        if(res.code == 500) {
          Message({
            message: '令牌失效，请重新登录',
            type: 'warning'
          })
          router.replace({path: '/login'})
        }
      })
    }
  }
  //设置当前路由名称,为了在Header组件中去使用
  localStorage.setItem('currentPathName', to.name)
  store.commit("setPath")//触发store的数据更新
  next()
})

export default router
